package com.entities.projectcomponents.list;

import java.util.ArrayList;
import java.util.List;

import com.core.protocols.ICustomDatasourceDelegate;
import com.core.protocols.IServiceLayerDelegate;
import com.core.protocols.ITableViewDatasource;
import com.core.protocols.ITableViewDelegate;
import com.core.ui.controller.base.CustomController;
import com.core.ui.customcell.TableViewCell;
import com.core.ui.customcell.TableViewDataCell;
import com.core.ui.customview.TableViewHeaderCell;
import com.core.utils.HTMLTagUtils;
import com.core.utils.IndexPath;
import com.core.utils.LocalizableString;
import com.entities.projectcomponents.servicelayer.ProjectComponentLayer;
import com.model.KeyValue;
import com.model.project.attributes.TaskComponent;

public class ProjectComponentsListController
        extends CustomController
        implements ITableViewDatasource, ITableViewDelegate, IServiceLayerDelegate {

	private ProjectComponentLayer layer;
	ArrayList <TaskComponent>     filteredList = null;



	/**
	 * ICustomDatasource
	 * 
	 * 
	 */
	@Override
	public void setCustomDatasourceDelegate ( ICustomDatasourceDelegate delegate ) {


	}



	@Override
	public void reloadData () {

		layer = new ProjectComponentLayer();
		layer.setLayerDelegate(this);
		layer.performRequestWithFilter(null, null);
	}



	/**
     *
     *
     */
	@Override
	public String tableStyleClassName () {

		return null;
	}



	@Override
	public String headerRowStyleClassNameAtIndex ( int index ) {

		return null;
	}



	@Override
	public String headerCellStyleClassNameAtIndexPath ( IndexPath indexPath ) {

		return null;
	}



	@Override
	public String cellStyleClassNameAtIndexPath ( IndexPath indexPath ) {

		return null;
	}



	@Override
	public String rowStyleClassNameAtIndex ( int index ) {

		return null;
	}



	@Override
	public int numberOfHeadRows () {

		return 1;
	}



	@Override
	public int numberOfHeadCols () {

		return 3;
	}



	@Override
	public TableViewHeaderCell headCellAtIndexPath ( IndexPath indexPath ) {

		LocalizableString localizableString = LocalizableString.sharedInstance();

		TableViewHeaderCell result = new TableViewHeaderCell();
		result.setStyleName("headerCellSimple");
		switch ( indexPath.getCol() ) {
			case 0: {
				result.setText("#");
				break;
			}
			case 1: {
				result.setText(localizableString.localizable("entity.Component.field.name"));
				break;
			}
			case 2: {
				result.setText(localizableString.localizable("grid.column.operation"));
				break;
			}

			default:
				break;
		}
		return result;
	}



	@Override
	public int numberOfDataRows () {

		return filteredList.size();
	}



	@Override
	public int numberOfDataCols () {

		return 3;
	}



	@Override
	public TableViewCell dataCellAtIndexPath ( IndexPath indexPath ) {

		LocalizableString localizableString = LocalizableString.sharedInstance();

		TaskComponent item = filteredList.get(indexPath.getRow());
		TableViewDataCell result = new TableViewDataCell();
		switch ( indexPath.getCol() ) {
			case 0: {
				result.setStyleName("dataCellSimple");
				result.setText(String.format("%d", 1 + indexPath.getRow()));
				break;
			}
			case 1: {
				result.setStyleName("dataCellSimple maxwidth");
				result.setText(item.getName());
				result.setOnCellClick(String.format("ProjectComponentOpen?projectComponentId=%d", item.getId()));
				break;
			}
			case 2: {
				result.setStyleName("dataCellSimple");
				String link = String.format("ProjectComponentUpdate?projectComponentId=%d", item.getId());
				ArrayList <KeyValue> attrs = new ArrayList <KeyValue>();
				attrs.add(new KeyValue("href", link, true));
				attrs.add(new KeyValue("class", "trigger_lnk", true));
				String editText = HTMLTagUtils.customTag("a", attrs, localizableString.localizable("object.operation.edit"));

				link = String.format("ProjectComponentDelete?projectComponentId=%d", item.getId());
				attrs = new ArrayList <KeyValue>();
				attrs.add(new KeyValue("href", link, true));
				attrs.add(new KeyValue("class", "trigger_lnk", true));
				String deleteText = HTMLTagUtils.customTag("a", attrs, localizableString.localizable("object.operation.delete"));

				result.setText(String.format("%s|%s", editText, deleteText));
				break;

			}
			default: {
				break;
			}
		}
		return result;
	}



	@Override
	public <T> void responseResponseItemsList ( final List <T> items,
	                                            final Object request,
	                                            final Exception exception ) {


	}

}
